const apiUrl = import.meta.env.VITE_API_DOMAIN;
const apiPrefix = import.meta.env.VITE_API_PREFIX || "/";

const defaultConfig = {
  method: "GET",
  header: {
    "content-type": "application/json",
  },
  showLoading: true,
};

let loadingTotal = 0;

/**
 * 请求函数
 * @param {string} config.url 请求路径
 * @param {string} config.method 请求方法
 * @param {object} config.header 请求头
 * @param {object} config.data 请求参数
 * @param {boolean} config.showLoading 是否显示loading
 * @param {function} getRequestTask 请求任务，用来获取abort能力
 * @returns {promise}
 */
export const request = (config = {}, getRequestTask) => {
  let relConfig = { ...defaultConfig, ...config };
  if (relConfig.showLoading) {
    loadingTotal++;
    wx.showLoading({
      title: "加载中",
      mask: true,
    });
  }
  return new Promise((resolve, reject) => {
    let requestTask = wx.request({
      url: apiUrl + apiPrefix + relConfig.url,
      header: relConfig.header,
      success: (res) => {
        resolve(res);
      },
      fail: (err) => {
        reject(err);
      },
      complete: () => {
        if (relConfig.showLoading) {
          loadingTotal--;
          if (loadingTotal === 0) {
            wx.hideLoading();
          }
        }
      },
    });
    // 提供获取requestTask的能力
    getRequestTask && getRequestTask(requestTask);
  });
};

/**
 * get请求
 * @param {string} path 请求路径
 * @param {object} data 请求参数
 * @param {object} config config配置
 * @param {function} getRequestTask 请求任务，用来获取abort能力
 * @returns {promise}
 */
export function get(path, data, config, getRequestTask) {
  return request(
    {
      url: path,
      data: data,
      method: "GET",
      ...config,
    },
    getRequestTask
  );
}

/**
 * post请求
 * @param {string} path 请求路径
 * @param {object} data 请求参数
 * @param {object} config config配置
 * @param {function} getRequestTask 请求任务，用来获取abort能力
 * @returns {promise}
 */
export function post(path, data, config, getRequestTask) {
  return request(
    {
      url: path,
      data: data,
      method: "POST",
      ...config,
    },
    getRequestTask
  );
}
